iT邦幫忙

2024 iThome 鐵人賽

DAY 26
2
生成式 AI

2024 年用 LangGraph 從零開始實現 Agentic AI System系列 第 26

【Day 26】- Ollama: 革命性工具讓本地 AI 開發觸手可及 - 從安裝到進階應用的完整指南

  • 分享至 

  • xImage
  •  

摘要
這篇文章是一篇關於 Ollama 的詳細指南,介紹了 Ollama 這個開源本地大型語言模型運行框架。文章首先介紹了 Ollama 的背景、特性和優點,強調它為開發者和技術愛好者提供了一個簡單而強大的本地 AI 開發環境。接著文章詳細說明了 Ollama 的安裝、啟動、模型運行、API 呼叫、關閉和更新等步驟,並提供了一些實用的提示和常見問題的解決方案。文章還介紹了如何在 Docker 環境和 Colab 中部署 Ollama,以及如何使用 GGUF 格式將 HuggingFace 模型轉換為 Ollama 支持的格式。最後,文章總結了 Ollama 的進階應用,包括使用 Web UI 來創建一站式的本地 AI 開發環境,以及如何使用自定義模型。文章強調了 Ollama 在本地 AI 開發中的重要性,並鼓励讀者探索 Ollama 的無限可能。

引言:為什么你需要了解 Ollama

在人工智能快速發展的今天,大型語言模型(LLM)已成為技術創新的核心驅動力。然而,運行這些模型往往需要強大的雲端資源和專業知識。這就是 Ollama 出現的契機——它為開發者和技術愛好者提供了一個簡單而強大的解決方案,讓在本地環境中運行和管理大型語言模型變得觸手可及。

首圖

Ollama:開啟本地 AI 的新紀元

什麼是 Ollama?

Ollama 是一個開源的本地大型語言模型(LLM)運行框架,旨在簡化在本地環境中運行和管理大型語言模型的過程。它支援多種開源的大型語言模型,如 Llama 3、Phi 3、Mistral、Gemma 等,並且可以在 macOS、Linux 和 Windows 平台上運行。

Ollama 的特點與優勢

  1. 豐富的模型庫:Ollama 提供了一個不斷擴展的預訓練模型庫,從通用模型到針對特定領域的專業模型,應有盡有。

  2. 簡單易用:即使是沒有技術背景的用戶也能輕鬆安裝和使用 Ollama。

  3. 本地運行,保障隱私:所有模型運行和數據存儲均在本地進行,確保數據隱私和安全。

  4. 跨平台支持:支援 macOS、Linux 和 Windows(預覽版),滿足不同用戶的需求。

  5. 靈活性與可定制性:用戶可以根據自己的需求自定義模型行為,調整系統提示詞、模型推理溫度、上下文窗口長度等參數。

亮點提示:Ollama 的本地運行特性不僅保護了用戶的數據隱私,還降低了對雲端服務的依賴,為個人和小型團隊提供了更經濟實惠的 AI 開發環境。

Ollama 安裝教學:從零開始的 AI 之旅

1. 下載並安裝 Ollama

  1. 訪問 Ollama 官網

  2. 根據您的操作系統(macOS、Windows 或 Linux)下載相應的安裝包。

  3. 運行安裝程序:

    • macOS 和 Windows:直接運行下載的安裝程序。
    • Linux:打開終端,運行以下命令:
    curl -fsSL https://ollama.com/install.sh | sh
    

圖片:Ollama 官網下載頁面這裡可以把三個平台的下載內容都截圖放上來

2. 啟動 Ollama

打開終端或命令提示符,輸入以下命令啟動 Ollama 服務:

ollama serve

3. 使用 Ollama 運行模型

  1. 下載模型:使用 ollama pull <模型名稱> 命令下載所需的模型。例如:

    ollama download gemma:2b
    
  2. 運行模型:使用以下命令啟動模型並與之交互:

    ollama run gemma:2b
    

圖片:終端中運行 gemma:2b 模型的界面

實用提示:首次下載模型可能需要一些時間,取決於您的網絡速度和模型大小。建議在網絡良好的環境下進行初次設置。

4. 使用 REST API 呼叫服務

Ollama 提供了 REST API,方便開發者集成到自己的應用中。以下是一個簡單的例子:

curl http://localhost:11434/api/chat -d '{
  "model": "gemma:2b",
  "messages": [
    { "role": "user", "content": "What is 2+2?" }
  ],
  "stream": false
}'

圖片:使用 curl 命令調用 Ollama API 的結果

5. 如何關閉 Ollama?

值得注意的是,即使終端顯示程序已"結束",Ollama 的服務可能仍在後台運行。對於 macOS 用戶,可以通過以下步驟完全退出:

  1. 在螢幕右上角的選單列找到 Ollama 圖示。
  2. 點擊該圖示,選擇"Quit"選項。

圖片:顯示 ollama 關閉

這將徹底關閉 Ollama 服務,釋放所有相關資源。

6. 如何更新 ollama?

根據筆者的使用經驗,在 Mac 平台上,每次打開 ollama 時,會自動檢查是否需要更新,而且官方更新也滿頻繁的,建議大家可以 follow 官方連結。如果要更新的話 ollama 圖案旁便會成下載 icon ,點擊 ‘Restart to Update‘,不到一毀時間就行惹。

圖片:顯示 ollama 更新圖案

Ollama 支援的大型語言模型

Ollama 支援多種大型語言模型,以下是部分可供下載的模型列表:

模型 參數 大小 下載命令
Llama 3.1 8B 4.7GB ollama run llama3.1
Phi 3 Mini 3.8B 2.3GB ollama run phi3
Gemma 2 2B 1.6GB ollama run gemma2:2b
Mistral 7B 4.1GB ollama run mistral
Code Llama 7B 3.8GB ollama run codellama

注意:運行 7B 模型需要至少 8GB RAM,13B 模型需要 16GB RAM,33B 模型需要 32GB RAM。

使用 Docker 部署 Ollama 服務

對於希望在 Docker 環境中運行 Ollama 的用戶,特別是只有 CPU 的設備,可以使用以下命令:

docker run -d \
--name ollama \
-p 11434:11434 \
-v ollama:/root/.ollama \
ollama/ollama:latest

此指令部署最新Ollama鏡像,包含所有必要的庫和依賴
主要組成:

  • docker run: 創建並啟動新容器
  • -d: 後台運行模式,提升效率
  • --name ollama: 為容器命名,便於管理
  • -p 11434:11434: 端口映射,實現主機與容器間的通訊
  • -v ollama_volume:/root/.ollama: 設置持久化存儲,確保數據安全
  • ollama/ollama:latest: 指定使用最新版Ollama鏡像

運行模型:

docker exec -it ollama ollama run gemma:2b

圖片:Docker 中運行 Ollama 的終端輸出

番外編使用 Colab 部署 Ollama 服務

這邊只是示範性用法,你可以透過以下指令在 colab 上直接跑起 ollama,更為客家人作法,只是效率極度差。僅用來證明可以跑服務在 colab 上,不具有任何實際價值,建議大家還是跑在電腦上比較好。況且多數語言模型環境可以使用 ollama 進行部署,工作上還是利多的。廢話不多說,開始執行使令

%load_ext colabxterm
%xterm

接著安裝

curl -fsSL https://ollama.com/install.sh | sh

並在 terminal 當中輸入

ollama serve & ollama pull llama3

補圖

接著就可以跟模型對話了

補圖

Github Repo


4. Ollama 的進階應用與故障排除

4.1 一站式懶人包:Ollama + Web UI

為了讓 Ollama 的使用更加便捷,我們可以結合 Ollama WebUI 來創建一個完整的本地 AI 開發環境。這個方法不僅簡化了部署過程,還提供了一個友好的圖形界面。

步驟 1:設置 Docker Compose

使用以下 Docker Compose 配置文件來同時部署 Ollama 和 Web UI:

version: '3.8'
services:
  ollama:
    image: ollama/ollama:latest
    ports:
      - 11434:11434
    volumes:
      - ollama:/root/.ollama
    container_name: ollama
    pull_policy: always
    tty: true
    restart: always
    # GPU 支持(如果有 NVIDIA GPU,請註釋掉以下行)
    #deploy:
    #  resources:
    #    reservations:
    #      devices:
    #        - driver: nvidia
    #          count: 1
    #          capabilities:
    #            - gpu

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    volumes:
      - open-webui:/app/backend/data
    depends_on:
      - ollama
    ports:
      - 3000:8080
    environment:
      - "OLLAMA_API_BASE_URL=http://ollama:11434/api"
    extra_hosts:
      - host.docker.internal:host-gateway
    restart: unless-stopped

volumes:
  ollama: {}
  open-webui: {}

專業提示:這份配置文件已經上傳到 Gist,您可以直接使用。

步驟 3:下載並運行

wget https://gist.github.com/Heng-xiu/3871b011b0159f776f755fcd46fea857/raw/docker-compose.yml
docker-compose up -d

注意:如果您有 NVIDIA GPU,請確保註釋掉 YAML 文件中的 GPU 相關行(17-24行)。

步驟 4:訪問 Ollama WebUI

部署完成後,您可以通過訪問 http://localhost:3000/ 來使用 Ollama WebUI。如果您是在遠程服務器上部署,請將 localhost 替換為服務器的 IP 地址。

圖片:Docker Dashboard 顯示 WebUI 端口

步驟 5:註冊和使用

  1. 打開瀏覽器,訪問 http://localhost:8080/
  2. 在登錄界面選擇 "Sign Up",輸入姓名、電子郵件(可以是虛擬的)和密碼進行註冊。
  3. 第一個註冊的用戶將自動成為管理員。
  4. 登錄後,您可以輸入模型名稱,然後點擊 "Pull from Ollama.com" 來下載和安裝模型。
  5. 安裝完成後,您就可以開始與模型進行對話了。

圖片:Ollama WebUI 登錄和模型下載界面

專業提示:如果 WebUI 鏡像連接失效,您可以訪問 Github Repo 查找最新的部署方法。

恭喜!您已經成功在短短兩分鐘內部署了 Ollama 和 Ollama WebUI,無需繁瑣的 pod 部署過程。

4.2 Ollama 和 Open WebUI 的常見問題與解決方案

在使用 Ollama 和 Open WebUI 的過程中,您可能會遇到一些常見問題。以下是一些問題的解決方法:

1. Docker 容器無法連接到服務

問題描述:Docker 容器無法連接到主機上的服務,導致 Open WebUI 無法正常運行。

解決方法

  • 使用 host.docker.internal 代替 localhost 來連接主機服務:
environment:
  - API_URL=http://host.docker.internal:11434
  • 確保主機上的服務正在運行,並且防火牆沒有阻止相關端口的訪問。

2. 連接錯誤或需要更新

問題描述:Open WebUI 顯示連接錯誤或需要更新。

解決方法

  • 更新到最新版本:
docker-compose pull
docker-compose up -d
  • 檢查網絡連接,確保沒有防火牆或代理阻止連接。

3. WebUI 無法啟動

問題描述:Open WebUI 無法啟動,可能是由於配置錯誤或依賴項缺失。

解決方法

  • 檢查 Docker Compose 文件和配置文件是否正確。
  • 查看日誌以獲取更多錯誤信息:
docker-compose logs open-webui

5. 日誌和調試

問題描述:需要更多信息來調試問題。

解決方法

  • 查看 Ollama 和 Open WebUI 的日誌文件:
# 查看 Ollama 日誌
tail -f /path/to/ollama/logs

# 查看 Open WebUI 日誌
docker-compose logs open-webui

img

專業提示:定期檢查日誌可以幫助您及時發現和解決潛在問題,保持系統的穩定運行。

5. 在 Ollama 上運行自定義模型:從 HuggingFace 到本地部署

在 AI 開發領域,許多開發者經常在雲端上微調大型語言模型(LLMs),並希望能夠在本地環境中運行這些模型。然而,這個過程往往充滿挑戰,需要在各種平台和社區中尋找解決方案。幸運的是,GGUF 格式和 Ollama 的結合為這個問題提供了一個優雅的解決方案。

本節將指導您如何將模型轉換為 GGUF 格式、創建模型文件,並在 Ollama 上成功運行您的自定義 LLMs。無論您是研究人員、開發者,還是 AI 愛好者,這個指南都將幫助您在本地機器上充分利用您的自定義模型。

5.1 GGUF:高效模型格式的新標準

GGUF(GGML Universal Format)是由 llama.cpp 團隊開發的 GGML 的後續版本,專為大型語言模型設計的量化格式。

GGUF 的主要特點:

  1. 效率優化:使用 C/C++ 編寫,專為 Llama 模型的高效推理而設計。
  2. 靈活性:允許在 CPU 上執行 LLMs,同時支持將部分層加載到 GPU 上以提升速度。
  3. 廣泛兼容性:特別適合在 CPU 或 Apple 設備上運行模型。
  4. 資源節省:通過縮小模型權重來減少計算資源的消耗。

專業提示:GGUF 格式特別適合需要在資源受限環境中運行大型模型的場景,如個人電腦或移動設備。

圖片:GGUF 文件格式示意圖

來源:GGUF 文檔

5.2 將 HuggingFace 模型轉換為 Ollama 支持的 GGUF 格式

以下是將 HuggingFace 模型轉換為 Ollama 支持的 GGUF 格式的步驟:

步驟 1: 安裝必要工具

首先,我們需要安裝 llama.cpphuggingface_hub

# clone llama.cpp Repo
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp

# 安裝 huggingface_hub
pip install huggingface_hub

步驟 2: 從 HuggingFace 下載模型

使用 huggingface_hub 下載所需的模型:

from huggingface_hub import snapshot_download, login

login("你的 access token")

# 下载模型
snapshot_download(
    "google/gemma-2b",
    local_dir="gemma-2b",
    local_dir_use_symlinks=False,
    ignore_patterns=["*.gguf"]
)

步驟 3: 轉換模型為 GGUF 格式

使用 llama.cpp 提供的轉換腳本:

# 進入 llama.cpp 目錄
cd llama.cpp

# 執行轉換腳本
python convert_hf_to_gguf.py gemma-2b --outtype f16 --outfile gemma-2b.fp16.gguf

5.3 GGUF 格式的進階量化

步驟 1: 量化模型(可選)

如果需要進一步優化模型大小和計算效率,可以進行量化:

# 量化模型
./build/bin/llama-quantize gemma-2b.fp16.gguf --output gemma-2b/gemma-2b-q4-m.gguf q4_k_m

注意:量化可能會略微影響模型性能,但能顯著減少模型大小和推理時間。

步驟 2: 上傳轉換後的模型到 HuggingFace(可選)

如果您想分享您的轉換成果,可以將模型上傳到 HuggingFace:

from huggingface_hub import HfApi

api = HfApi()
api.upload_folder(
    folder_path="gemma-2b/gemma-2b-q4-m.gguf",
    repo_id="你的 HuggingFace Repo ID",
    repo_type="model"
)

5.4 在 Ollama 中使用自定義模型

步驟 1: 創建 Modelfile 並在 Ollama 中使用

  1. 創建 Modelfile:
echo "FROM ./gemma-2b/gemma-2b-q4-m.gguf" > Modelfile
  1. 構建和運行模型:
ollama create my-custom-model -f ./Modelfile
ollama run my-custom-model

步驟 2: 上傳模型到 Ollama Hub

  1. 獲取 Ollama public key:
cat ~/.ollama/id_ed25519.pub
  1. 將公鑰添加到 Ollama 網站的設置中。

  2. 上傳模型:

ollama push <Your-name>/<Model-name>

成功上傳後,您可以在 Ollama Hub 中查看您的模型。

圖片:Ollama Hub 界面展示上傳的模型

總結

通過本指南,您已經學會了如何將 HuggingFace 模型轉換為 Ollama 支持的 GGUF 格式,並成功在本地環境中部署和運行這些模型。這個過程涉及模型下載、格式轉換、可選的量化步驟,以及在 Ollama 中的使用和分享。

掌握這些技能將使您能夠更靈活地在本地環境中使用和實驗各種大型語言模型,無論是用於研究、開發還是個人項目。

專業提示:本文所有操作步驟都可以在這個 Github Repo 中找到,歡迎參考和實踐。

通過實踐這些步驟,您不僅可以運行自定義模型,還可以深入了解模型轉換和優化的過程,為您的 AI 開發之旅增添新的維度。

結語:Ollama 開啟的無限可能

Ollama 為開發者和 AI 愛好者提供了一個強大而靈活的工具,使本地運行大型語言模型變得前所未有的簡單。無論您是想要進行 AI 研究、開發智能應用,還是僅僅出於好奇想要探索 AI 的潛力,Ollama 都為您提供了一個理想的起點。

隨著 AI 技術的不斷發展,Ollama 這樣的工具將在推動 AI 民主化和創新方面發揮越來越重要的作用。現在正是開始您的 Ollama 之旅的最佳時機,探索本地 AI 開發的無限可能!

即刻前往教學程式碼 Repo,親自搭建屬於自己的 LLM Server 吧!別忘了給專案按個星星並持續關注更新,讓我們一起探索AI代理的新境界。

參考資料:

  1. https://brev.dev/blog/convert-to-llamacpp
  2. https://www.pacenthink.io/post/understanding-modelfile-in-ollama/
  3. https://github.com/ollama/ollama/blob/main/docs/modelfile.md#parameter
  4. https://github.com/ollama/ollama/blob/main/docs/modelfile.md#parameter
  5. https://ywctech.net/ml-ai/ollama-import-custom-gguf/

上一篇
【Day 25】- 數位轉型下的工安革命:知識圖譜與LangGraph的完美結合
下一篇
【Day 27】- 告別提示工程:DSPy如何革新大型語言模型的應用開發
系列文
2024 年用 LangGraph 從零開始實現 Agentic AI System31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
hengshiousheu
iT邦新手 4 級 ‧ 2024-10-17 16:43:53

最近消息是,可以直接從 HuggingFace 上拉 GGUF 格式檔案,不用額外建立 manifest,具體操作已經收錄在 HuggingFace blog 當中,可以做參考,未來有機會再行整理
https://huggingface.co/docs/hub/en/ollama

我要留言

立即登入留言